package seqlist.oj;

public class Num82 {
    public ListNode deleteDuplicates(ListNode head) {
        ListNode dummyHead = new ListNode(101);
        dummyHead.next = head;
        ListNode prev = dummyHead;
        ListNode cur = prev.next;
        while (cur != null) {
            ListNode next = cur.next;
            if (next == null) {
                // 此时链表中只有一个元素,不可能出现重复元素
                return dummyHead.next;
            }
            if (cur.val != next.val) {
                // 此时cur不是重复节点，三个指针都向后移动一个单位
                prev = prev.next;
                cur = cur.next;
            }else {
                // 说明此时cur.val == next.val
                // 让next指针一直向后移动，直到与cur.val不相等的节点位置
                while (next != null && cur.val == next.val) {
                    next = next.next;
                }
                // 此时next指向了第一个不重复的元素
                // 此时prev - next之间所有重复元素全部删除
                prev.next = next;
                cur = next;
            }
        }
        return dummyHead.next;
    }
}
